#include<iostream>

#include<functional>
#include <sys/socket.h>
#include<string>


using task2=std::function<void(int ,int)>;
using task1=std::function<void(int)>;
class test
{

public:
  void func_test(int x,int y)
  {
    std::cout<<x<<" "<<y<<std::endl;
    std::function<void()> fc=std::bind(t,1);
  }
  private:
  task1 t;
};



void add2(int x,int y,int z)
{
    std::cout<<x<<" "<<y<<" "<<std::endl;
}

void add(int i,std::string n)
{
    std::cout<<i<<std::endl;
    std::cout<<n<<std::endl;
}

int main()
{

    std::string message="wang";
    task1 tk=std::bind(add,std::placeholders::_1,message);
    tk(1);

    auto func=std::bind(add2,std::placeholders::_2,std::placeholders::_3,std::placeholders::_1);
    //表示add2的第一个参数由func的第二个参数指定，第二个参数由func的第三个参数指定，第三个参数由第一个参数指定

    func(1,2,3);

    test T;
    auto func_t=std::bind(&test::func_test,&T,1,2);
    func_t();

    return 0;
}